package com.wxzz.elearing.course.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wxzz.elearing.course.dto.CurriculumSectionTopicDto;
import com.wxzz.elearing.course.dto.UserCurriculumDto;
import com.wxzz.elearing.course.dto.WxUserCurriculumDto;
import com.wxzz.elearing.course.entity.Curriculum;
import com.wxzz.elearing.course.entity.CurriculumSectionTopic;
import com.wxzz.elearing.course.entity.WxUserCurriculum;
import com.wxzz.elearning.common.vo.JgPageVo;
import com.wxzz.elearning.common.vo.ReturnVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 我的课程
 * 内部课程（企业自己发布用户看过的课程）
 * 外部课程（自己购买的和企业购买的平台课程，这里的平台课程是看过的) 服务类
 * </p>
 *
 * @author
 * @since 2021-03-15
 */
public interface IWxUserCurriculumService extends IService<WxUserCurriculum> {

    /**
     * 查询我的课程
     *
     * @param wxUserId
     * @param wxUserCurriculumDto
     * @return
     */
    ReturnVO<JgPageVo<List<Curriculum>>> listWxUserCurriculumByWxUserId(Long wxUserId, WxUserCurriculumDto wxUserCurriculumDto);

    /**
     * 保存草稿箱
     *
     * @param saveType 0-工厂体检 1-星级认证 2-能力测评 3-在线考试
     * @param wxUserId
     * @return
     */
    ReturnVO saveBox(Long wxUserId, Integer saveType, List<CurriculumSectionTopic> curriculumSectionTopics);

    /**
     * 用户购买课程
     *
     * @param curriculumId
     * @return
     */
    ReturnVO saveWxUserCurriculum(Long wxUserId, Long curriculumId);

    /**
     * 用户收藏或取消课程
     * @param wxUserId
     * @param curriculumId
     * @return
     */
    ReturnVO collectCurriculum(Long wxUserId, Long curriculumId);

    /**
     * 查看参与学习人
     * @param userCurriculumDto
     * @return
     */
    ReturnVO<JgPageVo<List<WxUserCurriculum>>> listWxUserCurriculum(UserCurriculumDto userCurriculumDto);

    /**
     * 支付成功确认(远程调用)
     *
     * @param userOrderId
     * @return
     */
    ReturnVO<String> handlerNotifyCurriculum(Long userOrderId);

    /**
     * 根据讲师id查询总讲数和参与学习人数(远程调用)
     * @param docentId
     * @return
     */
    ReturnVO<String> selectDocentById(Long docentId);

    /**
     * 根据订单id查询用户购买的课程信息
     * @param orderId
     * @return
     */
    ReturnVO<JSONObject> selectCurriculumByOrderId(Long orderId);

}
